const axios = require('axios');

const BASE_URL = 'http://localhost:3000/projectPhase';

// 测试获取项目阶段列表
async function testGetPhaseList() {
    try {
        console.log('=== 测试获取项目阶段列表 ===');
        const response = await axios.get(`${BASE_URL}/list?page=1&limit=10`);
        console.log('响应状态:', response.status);
        console.log('响应数据:', JSON.stringify(response.data, null, 2));
    } catch (error) {
        console.error('获取列表失败:', error.response?.data || error.message);
    }
}

// 测试创建项目阶段
async function testCreatePhase() {
    try {
        console.log('\n=== 测试创建项目阶段 ===');
        const testData = {
            status: '未开始',
            statusType: 'gray',
            progress: '0%',
            phase: '测试阶段',
            phaseType: '自研',
            leader: '测试负责人',
            startTime: new Date('2024-02-01'),
            endTime: new Date('2024-02-28'),
            period: 28,
            hour: 224,
            bonusType: '固定金额',
            bonusAmount: 3000,
            calculateWorkTime: true,
            isConfirmPhase: false,
            isPaymentPhase: false,
            deliverFiles: ['测试文档'],
            files: '测试文档',
            remark: '这是一个测试阶段',
            creator: '测试用户'
        };
        
        const response = await axios.post(`${BASE_URL}/create`, testData);
        console.log('响应状态:', response.status);
        console.log('响应数据:', JSON.stringify(response.data, null, 2));
    } catch (error) {
        console.error('创建失败:', error.response?.data || error.message);
    }
}

// 测试更新项目阶段
async function testUpdatePhase() {
    try {
        console.log('\n=== 测试更新项目阶段 ===');
        const updateData = {
            status: '进行中',
            statusType: 'orange',
            progress: '50%',
            remark: '阶段已更新'
        };
        
        const response = await axios.put(`${BASE_URL}/update/1`, updateData);
        console.log('响应状态:', response.status);
        console.log('响应数据:', JSON.stringify(response.data, null, 2));
    } catch (error) {
        console.error('更新失败:', error.response?.data || error.message);
    }
}

// 测试获取项目阶段详情
async function testGetPhaseDetail() {
    try {
        console.log('\n=== 测试获取项目阶段详情 ===');
        const response = await axios.get(`${BASE_URL}/detail/1`);
        console.log('响应状态:', response.status);
        console.log('响应数据:', JSON.stringify(response.data, null, 2));
    } catch (error) {
        console.error('获取详情失败:', error.response?.data || error.message);
    }
}

// 测试更新状态
async function testUpdateStatus() {
    try {
        console.log('\n=== 测试更新项目阶段状态 ===');
        const statusData = {
            status: '已完成',
            statusType: 'blue'
        };
        
        const response = await axios.put(`${BASE_URL}/update-status/2`, statusData);
        console.log('响应状态:', response.status);
        console.log('响应数据:', JSON.stringify(response.data, null, 2));
    } catch (error) {
        console.error('更新状态失败:', error.response?.data || error.message);
    }
}

// 测试获取统计信息
async function testGetStats() {
    try {
        console.log('\n=== 测试获取项目阶段统计 ===');
        const response = await axios.get(`${BASE_URL}/stats`);
        console.log('响应状态:', response.status);
        console.log('响应数据:', JSON.stringify(response.data, null, 2));
    } catch (error) {
        console.error('获取统计失败:', error.response?.data || error.message);
    }
}

// 运行所有测试
async function runAllTests() {
    console.log('开始测试项目阶段API...\n');
    
    await testGetPhaseList();
    await testCreatePhase();
    await testUpdatePhase();
    await testGetPhaseDetail();
    await testUpdateStatus();
    await testGetStats();
    
    console.log('\n所有测试完成！');
}

// 如果直接运行此文件，则执行测试
if (require.main === module) {
    runAllTests().catch(console.error);
}

module.exports = {
    testGetPhaseList,
    testCreatePhase,
    testUpdatePhase,
    testGetPhaseDetail,
    testUpdateStatus,
    testGetStats,
    runAllTests
}; 